#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+5,M=2e6+5,mo=998244353;
int n,k,d[N],jc[M],ny[M],ans;
int ksm(int a,int b,int c)
{
	int ans=1;
	while(b>0)
	{
		if(b%2==1) ans=(ll)ans*a%c;
		a=(ll)a*a%c;
		b/=2;
	}
	return ans;
}
int get_C(int n,int m)
{
	if(n<m||n<0||m<0) return 0;
	return (ll)jc[n]*ny[m]%mo*ny[n-m]%mo;
}
int solve(int n,int m)
{
	return get_C(n+m-1,m-1);
}
int main()
{
	freopen("count.in","r",stdin);
	freopen("count.out","w",stdout);
    scanf("%d%d",&n,&k);
    jc[0]=1;
    for(int a=1;a<=n+k;a++) jc[a]=(ll)jc[a-1]*a%mo;
    ny[n+k]=ksm(jc[n+k],mo-2,mo);
    for(int a=n+k-1;a>=0;a--)
    {
    	ny[a]=(ll)ny[a+1]*(a+1)%mo;
	}
    for(int a=1;a<=n;a++)
    {
    	scanf("%d",&d[a]);
	}
	d[0]=1;
	for(int a=1;a<n;a++) ans=(ans+solve(a,k-1))%mo;
	for(int a=1;a<=n;a++)
	{
		if(d[a]<d[a-1]) break;
		if(a==n) ans=(ans+1)%mo;
		for(int b=d[a-1];b<d[a];b++)
		{
			ans=(ans+solve(n-a,k-b))%mo;
		}
	}
	printf("%d",ans);
}
